home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 16 / AMIGAplus Sonderheft 16 (1998)(ICP)(DE)[!].iso / rexx / karnaugh.amicad < prev    next >
Text File  |  1998-05-24  |  3KB  |  127 lines

  1. /* Création d'un tableau de Karnaugh
  2.    Version 1.00, 5 Avril 1998, © R.Florac */
  3.  
  4. options results     /* indispensable pour récupérer le résultat des macros */
  5.  
  6. signal on error     /* pour l'interception des erreurs */
  7. signal on syntax
  8.  
  9. 'ASK("Nombre d''entrées")'; nbe=result
  10. if nbe="" then exit
  11.  
  12. do i=1 to nbe
  13.     'ASK("Nom de l''entrée 'i'")'; nomE.i=result
  14. end
  15.  
  16. 'ASK("Nom de la sortie")'; nomS=result
  17.  
  18. 'SETSCALE(0,1,1):ROTATE(0,0):SYMMETRY(0,0):DRAWMODE(1)'
  19.  
  20. nbcases=2**nbe        /* nombre de cases */
  21. nblignes=nbe%2        /* nombre de lignes */
  22. nbcol=nbe-nblignes  /* nombre d'entrées situées en haut (horizontal) */
  23.  
  24. /* Tracé des lignes verticales */
  25. c=(nbe-nbcol)*10+20
  26. l0=10+nbcol*15
  27. l1=l0+(2**nblignes)*30
  28. do col=1 to (2**nbcol)+1
  29.     select
  30.     when col=1 then 'DRAWMODE(2)'
  31.     when col=(2**nbcol)+1 then 'DRAWMODE(2)'
  32.     otherwise 'DRAWMODE(1)'
  33.     end
  34.     'MARK(DRAW('c+col*30','l0','c+col*30','l1'))'
  35.     col.col=c+col*30
  36. end
  37.  
  38. /* Tracé des lignes horizontales */
  39. c0=(nbe-nbcol)*10+50
  40. c1=c0+((2**nbcol))*30
  41. do i=1 to (2**nblignes)+1
  42.     select
  43.     when i=1 then 'DRAWMODE(2)'
  44.     when i=(2**nblignes)+1 then 'DRAWMODE(2)'
  45.     otherwise 'DRAWMODE(1)'
  46.     end
  47.     'MARK(DRAW('c0','l0','c1','l0'))'
  48.     ligne.i=l0
  49.     l0=l0+30
  50. end
  51.  
  52. /* Tracé des valeurs d'entrées (horizontales) */
  53. nbval=(2**nbcol)/2
  54. l0=10+nbcol*15
  55. pas=1
  56. do c=1 to nbcol
  57.     if c=nbcol then do
  58.     p=nbval+1
  59.     d=p+nbval
  60.     'MARK(DRAW('col.p','l0-c*10','col.d','l0-c*10'))'
  61.     end
  62.     else do
  63.     p=pas+1
  64.     do while p<=nbval*2
  65.         r=p+pas*2
  66.         'MARK(DRAW('col.p','l0-c*10','col.r','l0-c*10'))'
  67.         p=r+pas*2
  68.     end
  69.     pas=pas*2
  70.     end
  71. end
  72.  
  73. /* Tracé des valeurs d'entrées (verticales) */
  74. nbval=(2**nblignes)/2
  75. pas=1
  76. do l=1 to nblignes
  77.     if l=nblignes then do
  78.     p=nbval+1
  79.     d=p+nbval
  80.     'MARK(DRAW('col.1-10*l','ligne.p','col.1-10*l','ligne.d'))'
  81.     end
  82.     else do
  83.     p=pas+1
  84.     do while p<=nbval*2
  85.         r=p+pas*2
  86.         'MARK(DRAW('col.1-10*l','ligne.p','col.1-10*l','ligne.r'))'
  87.         p=r+pas*2
  88.     end
  89.     pas=pas*2
  90.     end
  91. end
  92.  
  93. /* Écriture des repères verticaux */
  94. 'ROTATE(0,3):DRAWMODE(1)'
  95. do i=1 to nblignes
  96.     if nomE.i="" then nomE.i='?'
  97.     'MARK(WRITE("'nomE.i'",'col.1-10*i+3','ligne.d+10'+TXHEIGHT("'nomE.i'")))'
  98.     c=c+15
  99. end
  100.  
  101. /* Écriture des repères horizontaux */
  102. 'ROTATE(0,0)'
  103. d=(2**nbcol)+1
  104. do while i<=nbe
  105.     if nomE.i="" then nomE.i='?'
  106.     'MARK(WRITE("'nomE.i'",'col.d+5','ligne.1+4-10*(i-nblignes)'))'
  107.     i=i+1
  108. end
  109.  
  110. /* Écriture du nom de la sortie */
  111. if nomS="" then nomS="?"
  112. d=d%2+1
  113. p=(2**nblignes)+1
  114. 'MARK(WRITE("'nomS'",'col.d'-TXWIDTH("'nomS'")/2,'ligne.p+15'))'
  115.  
  116. exit
  117.  
  118. /* Traitement des erreurs, interruption du programme */
  119. syntax:
  120. erreur=RC
  121. 'MESSAGE("Script Karnaugh"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
  122. exit
  123.  
  124. error:
  125. 'MESSAGE("Script Karnaugh"+CHR(10)+"Erreur en ligne 'SIGL'")'
  126. exit
  127.